x

Find All Anagrams in a String

Leetcode #438 | Medium | Скользящее окно | O(26)

Идея

Скользящее окно с идеей O(26) (int[26] для частот символов)

Big-O

  • Время O(N)
  • Память O(1)

Код

class Solution {
    public List<Integer> findAnagrams(String s, String p) {
        List<Integer> res = new ArrayList<>();
        if (s.length() < p.length()) return res;
        int[] b1 = new int[26], b2 = new int[26];
        for (char c : p.toCharArray()) b1[c - 'a']++;
        int l = 0;
        for (int r = 0; r < s.length(); r++) {
            b2[s.charAt(r) - 'a']++;
            if (r - l + 1 > p.length()) { b2[s.charAt(l) - 'a']--; l++; }
            if (r - l + 1 == p.length() && Arrays.equals(b1, b2)) res.add(l);
        }
        return res;
    }
}
Left-click: follow link, Right-click: select node, Scroll: zoom
x